package com.my.configure;

import org.beetl.core.GroupTemplate;
import org.beetl.ext.jfinal.BeetlRenderFactory;
import org.beetl.sql.ext.jfinal.JFinalBeetlSql;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.kit.PropKit;
import com.management.location.controller.TestLocationController;
import com.management.user.controller.ManagementController;

public class MyConfig extends JFinalConfig
{

	/**
	 * 此方法用来配置 JFinal 常量值， 如开发模式常量 devMode 的配置， 默认视图类型 ViewType的配置：
	 */
	@Override
	@SuppressWarnings("unused")
	public void configConstant(Constants me) {
		me.setDevMode(true);
		// 配置模板
		loadPropertyFile("database.properties");
		me.setMainRenderFactory(new MyBeetlRenderFactory());
		// 获取GroupTemplate模板，可以设置共享变量操作
		GroupTemplate gt = BeetlRenderFactory.groupTemplate;
		// devMode==true时ActionReporter打印action信息,模板会及时刷新
		me.setDevMode(false);
		// 设置视图类型
		//me.setViewType(ViewType.JSP);
		// 设置编码方式
		me.setEncoding("UTF-8");
		// 设置文件上传基础路径，该路径参数接受以”/”打头或者以 windows 磁盘盘符打头的绝对路径，
		// 即可将基础路径指向项目根径之外，方便单机多实例部署。当该路径参数设置为相对路径时，
		// 则是以项目根为基础的相对路径。
		me.setBaseUploadPath("/upload");
		// 设置文件下载基础路径，该路径参数接受以”/”打
		// 头或者以 windows 磁盘盘符打头的绝对路径，即可将基础路径指向项目根径之外，方便单机
		// 多实例部署。当该路径参数设置为相对路径时，则是以项目根为基础的相对路径。
		me.setBaseDownloadPath("/download");
	}

	/**
	 * 此方法用来配置 JFinal 访问路由， 如下代码配置了将”/hello”映射到 HelloController 这个控 制 器 ， 通 过 以
	 * 下 的 配 置 ， http://localhost/hello 将 访 问 HelloController.index() 方 法 ， 而
	 * http://localhost/hello/methodName 将访问到 HelloController.methodName()方法。
	 * 拆分配置方法： public class FrontRoutes extends Routes { public void config() {
	 * add("/", IndexController.class); add("/blog", BlogController.class); } }
	 * 拆分配置类需继承 Routes 而后在该方法体中配置为：me.add(new FrontRoutes());
	 */
	@Override
	public void configRoute(Routes me) {
		me.add("/", ManagementController.class);
		me.add("/location", TestLocationController.class);
	}

	/**
	 * 此方法用来配置 JFinal 的 Plugin， 如下代码配置了 Druid 数据库连接池插件与 ActiveRecord数据库访问插件。
	 * 通过以下的配置，可以在应用中使用 ActiveRecord 非常方便地操作数据库。
	 */
	@Override
	public void configPlugin(Plugins me) {
		PropKit.use("database.properties");
		//DruidPlugin dp = new DruidPlugin(pro.get("jdbcUrl"), pro.get("user"),pro.get("password"));
		//me.add(dp);
		/*ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
		me.add(arp);
		_MappingKit.mapping(arp);
		arp.setShowSql(false);*/
		JFinalBeetlSql.init();
	}

	/**
	 * 此方法用来配置 JFinal 的全局拦截器，全局拦截器将拦截所有 action 请求， 除非使用@Clear 在 Controller
	 * 中清除，如下代码配置了名为 AuthInterceptor 的拦截器。
	 */
	@Override
	public void configInterceptor(Interceptors me) {
		//		me.add(new AuthInterceptor());
		//		me.add(new VisitUsersInterceptor());
		//		me.add(new TxByMethodRegex(".*save.*|.*update.*|.*delete.*"));
		//		me.add(new Tx());
	}

	/**
	 * 此方法用来配置JFinal的Handler， 如下代码配置了名为ResourceHandler的处理器， Handler可以接管所有 web
	 * 请求，并对应用拥有完全的控制权，可以很方便地实现更高层的功能性扩展 。
	 */
	@Override
	public void configHandler(Handlers me) {
		//me.add(new ResourceHandler("/websocket.ws.*"));
	}

	/**
	 * JFinalConfig中的afterJFinalStart()与beforeJFinalStop()
	 * 方法供开发者在JFinalConfig继承类中覆盖。 JFinal 会在系统启动完成后回调 afterJFinalStart()方法，
	 * 会在系统关闭前回调beforeJFinalStop()方法。 这两个方法可以很方便地在项目启动后与关闭前让开发者有机会进行额外操作，
	 * 如在系统启动后创建调度线程或在系统关闭前写回缓存。
	 */
	@Override
	public void afterJFinalStart() {
		super.afterJFinalStart();
	}

	@Override
	public void beforeJFinalStop() {
		super.beforeJFinalStop();
	}
}